package com.jiyinit.web.core.mobile.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.jiyinit.core.framework.base.entity.ResponseDto;
import com.jiyinit.core.framework.base.util.JsonEntityTransform;
import com.jiyinit.core.framework.base.util.LogUtil;
import com.jiyinit.web.core.activiti.entity.TabTripOrderEntity;
import com.jiyinit.web.core.activiti.service.TabTripOrderServiceImpl;
import com.jiyinit.web.core.common.config.PropertyPlaceholderConfigurer;
import com.jiyinit.web.core.common.token.Token;
import com.jiyinit.web.core.common.util.HttpClientUtil;
import com.jiyinit.web.core.qunar.dto.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Decoder;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;

/**
 * 功能描述:去哪儿网 飞机票对接相关接口
 * @auther: WUSM
 * @date: 2018/12/27 9:17
 */
@Controller
@RequestMapping("/mobile/mairTicket")
public class MairTicketController {
    String QUNAR_BASE_URL = (String) PropertyPlaceholderConfigurer.getContextProperty("QUNAR_BASE_URL");

    /**
     * 日志对象
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(MairTicketController.class);

    @Resource(name = "core.tabTripOrderServiceImpl")
    private TabTripOrderServiceImpl tabTripOrderService;

   /**
    * 功能描述:航班搜索
    * @auther: WUSM
    * @date: 2018/12/27 9:19
    */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/searchflight")
    public ResponseEntity<ResponseDto> searchflight(HttpServletRequest request) {

//        String params = "{\"date\":\"2019-01-31\",\"dpt\":\"AXF\",\"arr\":\"INC\",\"ex_track\":\"chailv\"}";
        String result = null;
        try {
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "searchflight request  is request={}",request_json_str);
            String Tag = "flight.national.supply.sl.searchflight";

            result = HttpClientUtil.doPost(QUNAR_BASE_URL,params,Tag);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "searchflight interface error  is = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }
        return new ResponseEntity<>(ResponseDto.responseOK(result), HttpStatus.OK);
    }

    /**
     * 功能描述:报价搜索
     * @auther: WUSM
     * @date: 2018/12/27 14:33
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/searchprice")
    public ResponseEntity<ResponseDto> searchprice(HttpServletRequest request) {

//        String params = "{\"date\":\"2019-01-31\",\"dpt\":\"AXF\",\"arr\":\"INC\",\"flightNum\":\"JR1518\",\"ex_track\":\"chailv\"}";
        JSONObject result = null;
        try {
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "searchprice request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.searchprice";

            String response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);

            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "searchprice resultStatus result={}",resultStatus);

            result = JSON.parseObject(resultStatus.get("result").toString());
            LogUtil.info(LOGGER, "searchprice response result={}",resultStatus);
            String vendors = result.get("vendors").toString();
            JSONArray array = JSON.parseArray(vendors);

            LogUtil.info(LOGGER, "vendors array size={}",array.size());
            LogUtil.info(LOGGER, "secend one is ={}",array.get(0).toString());

            JSONObject vendor = JSON.parseObject(array.get(0).toString());

            JSONObject tgqNew_json = new JSONObject();
            tgqNew_json.put("flightNum",result.get("code"));
            tgqNew_json.put("cabin",vendor.get("cabin"));
            tgqNew_json.put("dpt",result.get("depCode"));
            tgqNew_json.put("arr",result.get("arrCode"));
            tgqNew_json.put("dptDate",result.get("date").toString().replaceAll("-",""));
            tgqNew_json.put("dptTime",result.get("btime"));
            tgqNew_json.put("policyId",Long.valueOf(vendor.get("policyId").toString()));
            tgqNew_json.put("maxSellPrice",Float.valueOf(vendor.get("barePrice").toString()));
            tgqNew_json.put("minSellPrice",Float.valueOf(vendor.get("barePrice").toString()));
            tgqNew_json.put("printPrice",Float.valueOf(vendor.get("vppr").toString()));
            tgqNew_json.put("tagName",vendor.get("prtag"));
            tgqNew_json.put("translate",false);
            tgqNew_json.put("sfid",Integer.valueOf(vendor.get("groupId").toString()));
            tgqNew_json.put("needPercentTgqText",false);
            tgqNew_json.put("businessExt",vendor.get("businessExt"));
            tgqNew_json.put("client",vendor.get("domain"));
            LogUtil.info(LOGGER, "tgqNew SEND JSON  ={}",tgqNew_json.toString());



            JSONObject BKjson = new JSONObject();
            BKjson.put("ticketPrice", String.valueOf(vendor.get("vppr")));
            BKjson.put("barePrice", String.valueOf(vendor.get("barePrice")));
            BKjson.put("price", String.valueOf(vendor.get("barePrice")));
            BKjson.put("basePrice", String.valueOf(vendor.get("basePrice")));
            BKjson.put("businessExt", vendor.get("businessExt"));
            BKjson.put("tag", vendor.get("prtag"));
            BKjson.put("carrier", result.get("carrier"));
            BKjson.put("flightNum", result.get("code"));
            BKjson.put("cabin", vendor.get("cabin"));
            BKjson.put("from", result.get("depCode"));
            BKjson.put("to", result.get("arrCode"));
            BKjson.put("to", result.get("arrCode"));
            BKjson.put("policyType", vendor.get("policyType"));
            BKjson.put("wrapperId", vendor.get("wrapperId"));
            BKjson.put("wrapperId", vendor.get("wrapperId"));
            BKjson.put("startTime", result.get("date"));
            BKjson.put("client", vendor.get("domain"));
            BKjson.put("policyId", vendor.get("policyId"));
            BKjson.put("dptTime", result.get("btime"));
            BKjson.put("flightType", "1");
            BKjson.put("userName","iggnyqm1672");
            BKjson.put("it",vendor.get("it"));
            LogUtil.info(LOGGER, "BK SEND JSON  ={}",BKjson.toString());
        } catch (Exception e) {
            LogUtil.info(LOGGER, "BK interface error is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(result), HttpStatus.OK);
    }

    /**
     * 功能描述:BK
     * @auther: WUSM
     * @date: 2018/12/27 17:35
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/bk")
    public ResponseEntity<ResponseDto> bk(HttpServletRequest request) {

        JSONObject resultOrder = null;
        try {
            String params = "{\"barePrice\":\"170\",\"basePrice\":\"0\",\"businessExt\":\"Vma/KC3/v9FG2M3TO/nM1AWf8118VFuBYCuE9/M+9g25e3fu63tKnIaRii0X5bvurIUY9XKev+d8KBACcV/XRxSs0DRPVQm3qOj33Xjv7CKxuqLHj7zAgkabR/yiBDuEozjqM51CZNxK0elNBdIE6XTWpqQuJdKeO8bI508SFLSeCGqeZPhirOFxVBS8Ik6N6vSMZOv460XOlKMcU8qEHOrvuqC4xBobDBTivg6+z+s1kV/DGqJq2nTXe+l9n2I6QnmzKJmyWh+4lIPFK3A8aQPtWA/G45hLcK6+3mvQC8kfgCS97Tl/J9Ehtn/KRtFvBv7WlXmHpbiyBJPepLdpiCpMHDmx6WbScU0aCZA0HYcbgcikD5Qk4Z1DD7R6QC+8u/IXpm+gpHLYwTp03rURxxiyVugKvvDfHF4TmNh6r13kwzPkLhUYsfa7w66wcWCNOwfjFiOmHpZ3MfXtXXIhwdC4c9hEl1W7evVP8mDbVkA+43dxIG/fb0zYH7ryzvEKTTZhBKwYpF2enTFK85vNLS6tgf29BfheRRefxVmB3yYQCBLvuOlS1Uj18uhq8O+7sEgi41fADzBZOdj3OtWn6taXqmjQM7gyk0mbBRzD6Y/ga6CldHfRTBQZUHRUPM333XWYSMIqgrpHU5WiTOh4Ig1bO1s8fDt5gASi/xuJsH5IWpdAwwO/Xmakzsm4XP5rBKtPT52f45Gw8K5xgzddrv7RVWTzElLsPP6E8Xmm7D4qkr18dcWj+WFJGBT4j3IkmKt2h5gbfU+2iwgWJFdR7X5AwmngeQUKPnGHGT+eSRGIc/qklEbs5kiUumo2iJc1/fPeowaIZEumpB9aATuO4LcdoQEmd3Z2e6Hb63nh/aUiAEdPacMA/CzaMvhKlwNB1mn/8Bw9IjYmKtcGbC/XB7EQQ2yuu3q0T1WcCNc0LB7g+dOu+ejuYb2f/bWJU4ZmLtYGFBavFMbJAbCosTWHwABG/XR2yOVSEQDntMimZ0U2QGYAa1VF/z/3/BOy/0FL7Sb+3j6TOs+U2FEEIR+MqCy+0e/qTR0uGdnOlwGMn34f3DsWdzbT+OLJAcYv3IETJ9iMU32DMA8ARYPjpifMEn7MjB7mpupyFzTC9kgapMqFk2E7dT4pXY+OHRbA8E792XjsXxeRWqMk8hJ0NnwStZjnQwUw9Q0DlAt+mtyI9/RNgBleKmrR57/7WEn6ja/Goaniydd1ymJTmX9hWCMfHkBFWL6HRDWp7Wo5yTxkO0KPM6znCSQo3j/8RjSmfB8iz7FWp8mkvXoyRTNNFe8bqONl9LfsuaJsHFe9pYv85uXXAZqdCD4++sP2Fh1dElI9M5ta+z/UcHfdcbjmv/Ixmg==\",\"cabin\":\"A1\",\"carrier\":\"GS\",\"client\":\"tjf.trade.qunar.com\",\"dptTime\":\"15:55\",\"flightNum\":\"GS7824\",\"flightType\":\"1\",\"from\":\"DLC\",\"it\":\"\",\"policyId\":\"0\",\"policyType\":\"0\",\"price\":\"170\",\"startTime\":\"2019-03-27\",\"tag\":\"OPL9\",\"ticketPrice\":\"170\",\"to\":\"TSN\",\"userName\":\"iggnyqm1672\",\"wrapperId\":\"ttsgndhgs01\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//        String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "bk request  is request={}",request_json_str);
            String Tag = "flight.national.supply.sl.bk";

            String response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);

            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "bk resultStatus result={}",resultStatus);

            JSONObject result = JSON.parseObject(resultStatus.get("result").toString());
            LogUtil.info(LOGGER, "bk response result={}",result);

            BKResponse bkResponse=JsonEntityTransform.json2Object(result.toString(), BKResponse.class);

            JSONObject extInfo = JSON.parseObject(result.get("extInfo").toString());
            LogUtil.info(LOGGER, "bk response extInfo={}",extInfo);

            JSONObject priceInfo = JSON.parseObject(result.get("priceInfo").toString());
            LogUtil.info(LOGGER, "bk response priceInfo={}",priceInfo);

            JSONObject BKjson = new JSONObject();
            BKjson.put("productTag", extInfo.get("tag"));
            BKjson.put("insureTag", "");
            BKjson.put("flyFund", false);
            BKjson.put("isUseBonus", false);
            BKjson.put("fuelTax", Integer.valueOf(priceInfo.get("tof").toString()));
            BKjson.put("childFuelTax", Integer.valueOf(priceInfo.get("childtof").toString()));

            OrderRequest orderRequest = new OrderRequest();
            orderRequest.setProductTag(bkResponse.getExtInfo().getTag());
            orderRequest.setInsureTag("");
            orderRequest.setFlyFund(false);
            orderRequest.setIsUseBonus(false);
            orderRequest.setFuelTax(0);
            orderRequest.setChildFuelTax(0);
            orderRequest.setConstructionFee(Integer.valueOf(bkResponse.getPriceInfo().getArf()));
            //Key：ADU(成人)，CHI(儿童)，INF(婴儿)
            orderRequest.setPrintPrice((int)bkResponse.getPriceInfo().getPriceTag().get("ADU").get(0).getViewPrice());
            orderRequest.setyPrice(Integer.parseInt(bkResponse.getPriceInfo().getTicketPrice()));
            orderRequest.setChildPrintPrice(Integer.parseInt(bkResponse.getPriceInfo().getChildTicketPrice()));
            orderRequest.setDiscount(bkResponse.getPriceInfo().getDiscount());
            orderRequest.setPolicyType(Integer.parseInt(bkResponse.getExtInfo().getPolicyType()));
            orderRequest.setPolicyId(Integer.parseInt(bkResponse.getExtInfo().getPolicyId()));
            orderRequest.setType("");
            orderRequest.setContact("武士敏");
            orderRequest.setContactPreNum("86");
            orderRequest.setContactMob("19931199768");
            orderRequest.setContactEmail("346610648@qq.com");

            String invoiceType = "";
            Map map =  bkResponse.getExpressInfo().getInvoiceType();
            Iterator iter = map.entrySet().iterator();
            while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            Object key = entry.getKey();
            invoiceType=key.toString();
            Object val = entry.getValue();
            }

            orderRequest.setInvoiceType(Integer.valueOf(invoiceType));
            orderRequest.setReceiverTitle("北京冀银科技有限公司");
            orderRequest.setReceiverType(3);
            orderRequest.setTaxpayerId("91110102MA0025802T");
            orderRequest.setSjr("武士敏");
            orderRequest.setSjrPhone("19931199768");
            orderRequest.setAddress("河北省石家庄平安南大街79号");
            orderRequest.setXcd("");
            orderRequest.setXcdMethod("");
            orderRequest.setXcdPrice(0);
            orderRequest.setBxInvoice("");
            OrderFlightInfoReq flightInfo = new OrderFlightInfoReq();
            flightInfo.setFlightNum(bkResponse.getExtInfo().getFlightNum());
            flightInfo.setGx("");
            flightInfo.setFlightType(Integer.parseInt(bkResponse.getExtInfo().getFlightType()));
            flightInfo.setStopInfo(bkResponse.getFlightInfo().get(0).getStops());
            flightInfo.setDeptAirportCode(bkResponse.getFlightInfo().get(0).getDpt());
            flightInfo.setArriAirportCode(bkResponse.getFlightInfo().get(0).getArr());
            flightInfo.setDeptCity(bkResponse.getFlightInfo().get(0).getDptCity());
            flightInfo.setArriCity(bkResponse.getFlightInfo().get(0).getArrCity());
            flightInfo.setDeptDate(bkResponse.getFlightInfo().get(0).getDptDate());
            flightInfo.setDeptTime(bkResponse.getFlightInfo().get(0).getDptTime());
            flightInfo.setArriTime(bkResponse.getFlightInfo().get(0).getArrTime());
            flightInfo.setCabin(bkResponse.getFlightInfo().get(0).getCabin());
            flightInfo.setChildCabin(bkResponse.getFlightInfo().get(0).getChildCabin());
            orderRequest.setFlightInfo(flightInfo);

            orderRequest.setPassengerCount(1);

            List<OrderPassengerReq> passengers = new ArrayList();
            OrderPassengerReq passengerReq = new OrderPassengerReq();
            passengerReq.setName("武士敏");
            passengerReq.setAgeType(0);
            passengerReq.setCardType("NI");
            passengerReq.setCardNo("130129199003012540");
            passengerReq.setSex(0);
            passengerReq.setBirthday("1990-03-01");
            passengerReq.setPassengerPriceTag(bkResponse.getPriceInfo().getPriceTag().get("ADU").get(0).getTag());
            passengerReq.setBx(false);
            passengerReq.setFlightDelayBx(false);
            passengerReq.setTuipiaoBx(false);

            passengers.add(passengerReq);
            orderRequest.setPassengers(passengers);

            orderRequest.setBookingTag(bkResponse.getBookingTag());
            orderRequest.setXth("");
            orderRequest.setQt(bkResponse.getExtInfo().getQt());
            orderRequest.setSource("web.baituor.2728");//固定值
            orderRequest.setClientSite(bkResponse.getExtInfo().getClientId());

            String orderRequestJson = JsonEntityTransform.object2Json(orderRequest);
            LogUtil.info(LOGGER, "orderRequest info orderRequest={}",orderRequestJson );

            String TagOrder = "flight.national.supply.sl.order";

            String responseOrder = HttpClientUtil.doPost(QUNAR_BASE_URL,orderRequestJson,TagOrder);

            TabTripOrderEntity orderEntity = new TabTripOrderEntity();
            orderEntity.setArrCity(flightInfo.getArriCity());
            orderEntity.setArrCode(flightInfo.getArriAirportCode());
            orderEntity.setArrTime(flightInfo.getArriTime());
            orderEntity.setCabin(flightInfo.getCabin());
            orderEntity.setDeptCity(flightInfo.getDeptCity());
            orderEntity.setDeptCode(flightInfo.getDeptAirportCode());
            orderEntity.setDeptDate(flightInfo.getDeptDate());
            orderEntity.setDeptTime(flightInfo.getDeptTime());
            orderEntity.setFlightNum(flightInfo.getFlightNum());
            orderEntity.setFlightType(flightInfo.getFlightType());
            orderEntity.setClientSite(orderRequest.getClientSite());

            JSONObject resultStatusOrder = JSON.parseObject(responseOrder);
            LogUtil.info(LOGGER, "order resultStatus resultStatusOrder={}",resultStatusOrder);

            resultOrder = JSON.parseObject(resultStatusOrder.get("result").toString());
            LogUtil.info(LOGGER, "order result resultOrder={}",resultOrder);
            if(resultOrder.get("id")!=null){
                orderEntity.setOrderIdQunar((Integer)resultOrder.get("id"));
            }
            if(resultOrder.get("orderNo")!=null){
                orderEntity.setOrderNoQunar(resultOrder.get("orderNo").toString());
            }
            if(resultOrder.get("status")!=null){
                orderEntity.setStatus((Integer)resultOrder.get("status"));
            }
            if (resultOrder.get("errorDesc")!=null){
                orderEntity.setErrorDesc(resultOrder.get("errorDesc").toString());
            }
            if(resultOrder.get("noPayAmount")!=null){
                orderEntity.setAmountAll((Integer)resultOrder.get("noPayAmount"));
            }
            if(resultOrder.get("dishonest")!=null){
                orderEntity.setDishonest(resultOrder.get("dishonest").toString());
            }
            orderEntity.setUpdateTime(new Date());
            LogUtil.info(LOGGER, "orderEntity json is ={}",JsonEntityTransform.object2Json(orderEntity) );
            int orderId=tabTripOrderService.Insert(orderEntity);
            LogUtil.info(LOGGER, "orderId is ={}",orderId );
        } catch (Exception e) {
            LogUtil.error(LOGGER, "order interface error is ={}",e );
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }


        return new ResponseEntity<>(ResponseDto.responseOK(resultOrder), HttpStatus.OK);
    }

    /**
     * 功能描述:生单
     * @auther: WUSM
     * @date: 2018/12/29 11:26
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/order")
    public ResponseEntity<ResponseDto> order(HttpServletRequest request) {
        String result = "";
        TabTripOrderEntity orderEntity = new TabTripOrderEntity();
        orderEntity.setArrCity("银川");
        orderEntity.setArrCode("INC");
        orderEntity.setArrTime("09:05");
        orderEntity.setCabin("G");
        orderEntity.setDeptCity("阿拉善左旗");
        orderEntity.setDeptCode("AXF");
        orderEntity.setDeptDate("2019-01-31");
        orderEntity.setDeptTime("08:30");
        orderEntity.setFlightNum("JR1518");
        orderEntity.setFlightType(1);
        orderEntity.setClientSite("xos.trade.qunar.com");
        orderEntity.setOrderIdQunar(26431);
        orderEntity.setOrderNoQunar("xos190108171409912");
        orderEntity.setStatus(0);
        orderEntity.setAmountAll(15);
        orderEntity.setUpdateTime(new Date(1546938849778L));
        int orderId=tabTripOrderService.Insert(orderEntity);
        LogUtil.info(LOGGER, "orderId is ={}",orderId );

//        String params = "{\"barePrice\":\"361\",\"basePrice\":\"0\",\"businessExt\":\"Vma/KC3/v9FG2M3TO/nM1KE8zHMQI97Oa5x2oLrI4uVHon+urcjHCQHDcjPfNfcQjCTvxB9Q9GSOfcQ3AWS5dkH+rFHhZdNbOs4rs45s1x+UEBpFxxozxr+FODIt49t73JAKVUsOqSqwoz2YP3dFUbBWri3HFWJ+rKgwGezihO9eH5+OLnSpV+RrbVZubgAQ2qNX/hKk1eXmhgLP1uA9jzXof5IkDssITC7GWjfFsSZJF+atQcYJ/jkUrgP/KzpDkeaFgqNSyfgCYE65PWMdkAX7nQbQIEBrTUiufOza6vrSf58946P8D5mrnyzaPc/yS2LVisLpc3E6lW4e8TUDsnGUS57WMUM+g2SWut/zD9NFc8203M3Ceql2ROoWKke3Gk3xJL9GjzX7rDvn18VGqaw9JkHWIHeS3p4pZewHXNntU9HHl/gdzN21McnjhFK2qE3J8TwUr89JW8DsLNonKIJZ25Z+sFtZqqa+T2ERobkeeWexXDgp8k5jPw4j6Tx5ZyUObiquJc5SqlZDf+KAjGGubz9P+Tmjbg9df9/+jE8CNKpY+j/VoxkmLK3LhlcuuidlVJHr0Zkyvha6HagJZNJGm4S9jgjGA7WY2AlbvAOIEphT4PHznenfsBB13omuyKT2fB9Sz87cENTae3dA3w09b0zRsEF3o7PLBUMhN8/gXW+Z/OxTe97vhtKlLbLS49Acdn1u7h97IJgKYA9aPUjk7rXxeHJr4LXqQlJlPfNSO1xNNm4mKAkk5fqM4QmXzb9RfigC9GdDrNeV5x+1ac/1Ms9LzeQW+b76fsHJfpPEkp1AVIo607mPdkIkr2KZP9eHXB9M46XAH1G2a4kw7la7wUVjZVjeMd+b6ys33iai5wESD88TCsxtDHpbxalPGJzyd7vG5mVxwFX0tddGipyxEM2SecQN1F+zl37QKIzCSVNFQXLNcJBs0B4XvnWRML8EUy3Y8ZRRKOTdUMQTxJ0RuAwebEj0pUSBswzbXOCXKdKBZWrOlYdqxKTgc7EKubzZ5aXbWTUlfLGpX2JrLBlev+KSyvI8V3CzSaLdtve7fpi0nviI+Qb2jkVNvjrJZAX7zJ2vfISWgTlFUBaY6H9ha8+Xor0VTJexrMYpj0jt4Q8gwm1W0GK9MkSKpWADCtA2AtjHbZxm6A91ycl1pc+XlmpMicLLGNi0JqHqCohrKkMNgt6vTJXxnbI5/PvRSe/TDNi+WfgOiH/aHnPIGLnd5o6w3JU8cC2vZWaWbMrZhF7U7Jxunk9nRjN4x8/LP1b/+UW9K7iX6TIBjnUJQi3szNUU2ObQT3AFLvAERenW1GF1ODODm01fG1lwhMkzPD5oXlMkJajvmvn9TcOMRrZWKVmF9BHi0bqwzsmeuDfYDO4dnKI0P8o4vs9qfhNxjm5xzvv9mF/eIvi5l4czwGkq2EqS9858v3Nu5aZapVJ4iCYYPyi59tXdEuv1CYOAwoHoKjUvJC8leXkNNtRRoA==\",\"cabin\":\"U\",\"carrier\":\"JD\",\"client\":\"lah.trade.qunar.com\",\"dptTime\":\"10:05\",\"flightNum\":\"JD5567\",\"flightType\":\"1\",\"from\":\"PEK\",\"it\":\"\",\"policyId\":\"0\",\"policyType\":\"0\",\"price\":\"361\",\"startTime\":\"2018-12-31\",\"tag\":\"CXF1\",\"ticketPrice\":\"360\",\"to\":\"TAO\",\"userName\":\"iggnyqm1672\",\"wrapperId\":\"ttsgndh3335\"}";
     /*   String params = request.getParameter("params");
        String Tag = "flight.national.supply.sl.order";

        String result = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);*/
        return new ResponseEntity<>(ResponseDto.responseOK(result), HttpStatus.OK);
    }
   /**
    * 功能描述:支付前校验接口
    * @auther: WUSM
    * @date: 2019/1/4 11:52
    */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/payValidate")
    public ResponseEntity<ResponseDto> payValidate(HttpServletRequest request) {

        String response = null;
        String responsePay = "系统错误";
        try {
            String params = "{\"clientSite\":\"tjf.trade.qunar.com\",\"orderId\":\"4504260\",\"pmCode\":\"DAIKOU\",\"bankCode\":\"QUNARPAY\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//        String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "payValidate request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.payValidate";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "payValidate resultStatus result={}",resultStatus);

            //校验通过去支付
            if ("SUCCESS".equals(resultStatus.get("message"))){
                String paramsPay = "{\"clientSite\":\"tjf.trade.qunar.com\",\"orderId\":\"4504260\",\"pmCode\":\"DAIKOU\",\"bankCode\":\"QUNARPAY\",\"paymentMerchantCode\":\"pekyykj\",\"curId\":\"CNY\",\"bgRetUrl\":\"http://2286ht7655.iok.la/mobile/mairTicket/bgRetUrl\"}";
                String tagPay = "flight.national.supply.sl.pay";
                responsePay = HttpClientUtil.doPost(QUNAR_BASE_URL, paramsPay,tagPay);
                JSONObject resultStatusPay = JSON.parseObject(responsePay);
                LogUtil.info(LOGGER, "resultStatusPay is ={}",resultStatusPay);
                JSONObject resultPay = JSON.parseObject(resultStatusPay.get("result").toString());
                LogUtil.info(LOGGER, "pay response result={}",resultPay);

            }
        } catch (Exception e) {
            LogUtil.error(LOGGER, "payValidate error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }
        return new ResponseEntity<>(ResponseDto.responseOK(responsePay), HttpStatus.OK);
    }

    /**
     * 功能描述:订单查询接口
     * @auther: WUSM
     * @date: 2019/1/4 15:50
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/get")
    public ResponseEntity<ResponseDto> get(HttpServletRequest request) {

        JSONObject result = null;
        try {
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "searchflight request  is request={}",request_json_str);

            String Tag = "flight.national.tts.order.info.detail.get";

            String response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "get response is = {}",response);
            result = JSON.parseObject(resultStatus.get("result").toString());
            LogUtil.info(LOGGER, "get result is = {}",result);
            if(result.get("detail")!=null){
                JSONObject detail = JSON.parseObject(result.get("detail").toString());
                if(detail.get("orderNo")!=null && detail.get("status")!=null){
                    TabTripOrderEntity orderEntity = new TabTripOrderEntity();
                    orderEntity.setOrderNoQunar(detail.get("orderNo").toString());
                    orderEntity.setOrderStatus(detail.get("status").toString());
                    tabTripOrderService.updateByOrderNo(orderEntity);
                }
            }
        } catch (Exception e) {
            LogUtil.error(LOGGER, "get interface error is = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系統錯誤"), HttpStatus.OK);
        }
        return new ResponseEntity<>(ResponseDto.responseOK(result), HttpStatus.OK);
    }

    /**
     * 功能描述:支付回调接口
     * @auther: WUSM
     * @date: 2019/1/11 9:12
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/bgRetUrl")
    public ResponseEntity<ResponseDto> bgRetUrl(HttpServletRequest request) {

        String response = null;
        try {
            LogUtil.info(LOGGER, "bgRetUrl request  is  = {}",request);
            String sign = request.getParameter("sign");
            String createTime = request.getParameter("createTime");
            String data = request.getParameter("data");
            String tag = request.getParameter("tag");
            LogUtil.info(LOGGER, "sign  is  = {},createTime  is  = {},data  is  = {},tag  is  = {},",sign,createTime,data,tag);
            if(!StringUtils.isEmpty(data)){
               String dataDecoder = new BASE64Decoder().decodeBuffer(data).toString();
               LogUtil.info(LOGGER, "dataDecoder  is  = {}",dataDecoder);
            }
        } catch (Exception e) {
            LogUtil.error(LOGGER, "bgRetUrl error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:退改签说明查询接口
     * @auther: WUSM
     * @date: 2019/1/14 10:24
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/tgqNew")
    public ResponseEntity<ResponseDto> tgqNew(HttpServletRequest request) {

        String response = null;
        try {
            String params = "{\"arr\":\"TSN\",\"businessExt\":\"Vma/KC3/v9FG2M3TO/nM1BGxIUZniqz+kjG5zy57LmeAgsnfM4rpw6sM+uee/AjbNRW988jPQWAVtKTKuNdqt8iyWoNQb2/GJCfdx5hh3z7MYLxKmAoK/JlhsvQAD3zuiwkuPeoXzlSY6oDzOclauFipQalm1hvES2VyewRl+25yUjp3c1pOJc8UXjzQ9k7i16+uK3ztt4wpAoYJr4cE3nJakFYdvrfRsHJa1Syc6jWX1rl9rwVv6X0ll1eco/+UnxzLR5pQefhuT1sQF+m4qsNEwmCoBxaXhIxGSQ9JAUie3BUl7NwKQnQzQzM6fVFku7Chk/Y0FZjwJESrilAGNdm6DVhIt2HjcZ6IJoRf1nMghlDRQvLVwEpMlvljt0tly3K5frLGkzS9SG1Wo6B2SpJwF2fCB0itJHgKExgJviAnx8b4SwdQpu2XKcOoTmucZADPT3F3oQGVfJqb09H6HD8xqFcJ9MI6NaWXyqb4Fpb642+qGBDGy4yhRgt847HWwpBNCgXsClRTTbrdh6GdX302SXMYn42v9uds7PeraoekDEn8+fj5eg9a3WmoKILelEdgkgv8aBVocLMzKCS+J8M3vTIqT8xovRTyrz1l+19IIJ8vkueWeHssgF0rMmntuir8paDWWINpvNEqVFFm3JeOs8KvvI9FDsIuZog1TuOt6bk7WP5HsbIJrYMC5zxrGELRdWIpkk47OD+/MmV1bAQTg1D51Rhsx1tTAZVHNMyp9yiVQYogciQeuCcrzRPq7w7NONEBuUalvCLeLLrqSfL7O2dssBMC+qxgwFZIvvuJbRaZgcm48DRkYTwp+Hq89mmDvmMb9gVXrPoJsfkB+46s4qGgN/uNFkg+K7IaO96cBPyEid8cyNrFwIe3UrdbP1VMyYskd4PgC0/cGKXqIqK+k7qXqtL5rde5k4rpC1T4o94s1ahprXYGYdPMhN/X7rLhbqfMsTeL+q5iNYaNAaJxzxmxKI77CBqKfa2rCxfoBO9PL44uJDJ/A+LsYNWesefyC9KSVPYc44dyqf6UwpkQaKRs3ZLk14dVoCx7c3Be7UIjCkGGIb/2iT8uDk3aK0cSfYdcrXyF3tEYX9xIIb2tv3IJy0E80677U3Dc/Aq/DF7q4Zlf7nWi0D37oX71zomtZTotHD7d9lepSTHgal3esH9tDaTpOHhtssPQIswfc6Jon1Q4zw2clv1H5PyVM8D1BPbi0s40jT2mqEm0BQCsXATw6ARE8+2Q4UA1xr+Upw8OU/dsDNGXDPhhR+XIqA7P1PGOiUrw4nZEN/KAhqRv9KVfL+Z9DlWb5lYuRDU9yQ1ELjOz9WkQ0H1SBAf2qPg/D7bGh/e2BXpqnWx82rbN7QA/e7pSN5vqX5CL5j0hrQEj6/7KTTp2MV/K3STVvDWS8osHfP4huFDhUfMaf/2MPNkXvA0wp+otRLbbZYw=\",\"cabin\":\"A1\",\"client\":\"tjf.trade.qunar.com\",\"dpt\":\"DLC\",\"dptDate\":\"20190327\",\"dptTime\":\"15:55\",\"flightNum\":\"GS7824\",\"maxSellPrice\":170,\"minSellPrice\":170,\"needPercentTgqText\":false,\"policyId\":0,\"printPrice\":170,\"sfid\":126,\"tagName\":\"OPL9\",\"translate\":false}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "tgqNew request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.tgqNew";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "tgqNew response is = {}",response);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "tgqNew error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:退票查询接口
     * @auther: WUSM
     * @date: 2019/1/15 9:24
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/refundSearch")
    public ResponseEntity<ResponseDto> refundSearch(HttpServletRequest request) {

        String response = null;
        try {
//            String params = "{\"orderNo\":\"xep190111143223914\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "refundSearch request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.refundSearch";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "refundSearch response is = {}",response);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "refundSearch error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:退票申请接口
     * @auther: WUSM
     * @date: 2019/1/15 11:19
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/applyRefund")
    public ResponseEntity<ResponseDto> applyRefund(HttpServletRequest request) {

        String response = null;
        try {
            String params = "{\"orderNo\":\"tjf190130175125265\",\"refundCauseId\":\"16\",\"passengerIds\":\"6157286\",\"refundCause\":\"我不想飞了\",\"callbackUrl\":\"http://2286ht7655.iok.la/mobile/mairTicket/bgRetUrl\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "applyRefund request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.applyRefund";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "applyRefund response is = {}",response);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "applyRefund error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:退票上传附件接口
     * @auther: WUSM
     * @date: 2019/1/15 15:12
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/tpUpload")
    public ResponseEntity<ResponseDto> tpUpload(HttpServletRequest request) {
        String resultString = "";
        try {
            String params = "{\"orderNo\":\"xep190111143223914\",\"refundCauseId\":\"16\",\"passengerIds\":\"57559403\",\"refundCause\":\"我不想飞了\",\"callbackUrl\":\"http://2286ht7655.iok.la/mobile/mairTicket/bgRetUrl\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "tpUpload request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.tpUpload";
            Map<String, String> param = new HashMap();
            //生成签名 并组装系统级参数和应用级参数
            param = Token.getQunarSign(Tag, "{}");
            //直接将orderNo和passengerIds放到url后面
            StringBuilder urlBuilder = new StringBuilder(QUNAR_BASE_URL);
            urlBuilder.append(Joiner.on("&").withKeyValueSeparator("=").join(param));

            urlBuilder.append("&orderNo=")
                    .append(request_json.get("orderNo"))
                    .append("&passengerIds=")
                    .append(request_json.get("passengerIds"));

                CloseableHttpResponse response = null;

                try {
                    // 创建Http Post请求
                    String url = urlBuilder.toString();
                    Preconditions.checkState(StringUtils.isNotBlank(url));
                    HttpPost httpPost = new HttpPost(url);
                    RefundUploadRequest requestFile = new RefundUploadRequest();
                    HttpEntity httpEntity = buildHttpEntity(requestFile);
                    Preconditions.checkNotNull(httpEntity);
                    httpPost.setEntity(httpEntity);
                    // 执行http请求
                    response = HttpClients.createDefault().execute(httpPost);
                    resultString = EntityUtils.toString(response.getEntity(), "utf-8");
                } catch (Exception e) {
                    LOGGER.error("发起post请求失败", e);
                } finally {
                    try {
                        if(response != null) {
                            response.close();
                        }
                    } catch (IOException e) {
                        LOGGER.error("关闭Response失败", e);
                    }
                }
            LogUtil.info(LOGGER, "tpUpload response is = {}",resultString);

        } catch (Exception e) {
            LogUtil.error(LOGGER, "tpUpload error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(resultString), HttpStatus.OK);
    }

    private HttpEntity buildHttpEntity(RefundUploadRequest request) {
        try {
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            // 上传的文件
            builder.addBinaryBody("file", request.getFile().getInputStream(), ContentType.create("image/*"), request.getFile().getOriginalFilename());
            return builder.build();
        } catch (Exception e) {
            LOGGER.error("build http entity error", e);
        }
        return null;
    }

    /**
     * 功能描述:1.21.	改签查询接口
     * @auther: WUSM
     * @date: 2019/1/21 15:54
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/changeSearch")
    public ResponseEntity<ResponseDto> changeSearch(HttpServletRequest request) {

        String response = null;
        try {
//            String params = "{\"orderNo\":\"xep190111143223914\",\"changeDate\":\"2019-02-02\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "changeSearch request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.changeSearch";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "changeSearch response is = {}",response);

            List<TS_NationalPassenger> TSS = JsonEntityTransform.json2ObjectList(resultStatus.get("result").toString(),TS_NationalPassenger.class);
            TS_NationalPassenger TS = TSS.get(0);
            LogUtil.info(LOGGER, "TS  is = {}",TS.toString());

            ApplyChangeReq applyChangeReq = new ApplyChangeReq();
            applyChangeReq.setOrderNo("tjf190130175125265");
            applyChangeReq.setChangeCauseId("1");// 自愿改签 我要改变行程计划、我要改航班
            applyChangeReq.setPassengerIds(String.valueOf(TS.getId()));
            applyChangeReq.setApplyRemarks("我要改变行程计划、我要改航班");
            TS_TgqReason tgqReason = TS.getChangeSearchResult().getTgqReasons().get(0);
            TS_FlightAlterSearchResultWithText text = tgqReason.getChangeFlightSegmentList().get(1);
            applyChangeReq.setUniqKey(text.getUniqKey());
            applyChangeReq.setGqFee(text.getGqFee());
            applyChangeReq.setUpgradeFee(text.getUpgradeFee());
            applyChangeReq.setFlightNo(text.getFlightNo());
            applyChangeReq.setCabinCode(text.getCabinCode());
            applyChangeReq.setStartDate(text.getChangeDate());
            applyChangeReq.setStartTime(text.getStartTime());
            applyChangeReq.setEndTime(text.getEndTime());
            applyChangeReq.setCallbackUrl("http://2286ht7655.iok.la/mobile/mairTicket/bgRetUrl");
            String applyChangeReqJson = JsonEntityTransform.object2Json(applyChangeReq);
            LogUtil.info(LOGGER, "applyChangeReq json  is = {}",applyChangeReqJson);

        } catch (Exception e) {
            LogUtil.error(LOGGER, "changeSearch error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:1.22.	改签申请接口
     * @auther: WUSM
     * @date: 2019/1/24 8:49
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/applyChange")
    public ResponseEntity<ResponseDto> applyChange(HttpServletRequest request) {

        String response = null;
        try {
            String params = "{\"orderNo\":\"tjf190130175125265\",\"changeCauseId\":\"1\",\"passengerIds\":\"6157286\",\"applyRemarks\":\"我要改变行程计划、我要改航班\",\"uniqKey\":\"c279b796227801932b4270006605ec75\",\"gqFee\":\"34\",\"upgradeFee\":\"220\",\"childUseFee\":null,\"childExtraPrice\":null,\"flightNo\":\"GS7824\",\"cabinCode\":\"N\",\"startDate\":\"2019-03-30\",\"startTime\":\"13:55\",\"endTime\":\"15:05\",\"callbackUrl\":\"http://2286ht7655.iok.la/mobile/mairTicket/bgRetUrl\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
//            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "applyChange request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.applyChange";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "applyChange response is = {}",response);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "applyChange error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }

    /**
     * 功能描述:1.23.	改签支付接口
     * @auther: WUSM
     * @date: 2019/1/28 10:04
     */
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "/changePay")
    public ResponseEntity<ResponseDto> changePay(HttpServletRequest request) {

        String response = null;
        try {
//            String params = "{\"orderNo\":\"xep190111143223914\",\"changeDate\":\"2019-02-02\"}";
            String request_json_str = request.getParameter("request_json");
            JSONObject request_json = JSON.parseObject(request_json_str);
            String params = request_json.get("params").toString();
            LogUtil.info(LOGGER, "changePay request  is request={}",request_json_str);

            String Tag = "flight.national.supply.sl.changePay";

            response = HttpClientUtil.doPost(QUNAR_BASE_URL, params,Tag);
            JSONObject resultStatus = JSON.parseObject(response);
            LogUtil.info(LOGGER, "changePay response is = {}",response);
        } catch (Exception e) {
            LogUtil.error(LOGGER, "changePay error  is  = {}",e);
            return new ResponseEntity<>(ResponseDto.responseOK("系统错误"), HttpStatus.OK);
        }

        return new ResponseEntity<>(ResponseDto.responseOK(response), HttpStatus.OK);
    }
}
